无名商城论坛

搜索
查看: 450|回复: 0

[其他技术] 【HC】左旋转字符串

[复制链接]

1万

主题

1万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
32464
发表于 2022-5-8 18:41:21 | 显示全部楼层 |阅读模式
1. 左旋转字符串

对于一个给定的字符序列 S,把其循环左移 N 位后的序列输出。例如字符序列 S=”abcdef”,输出循环左移3位后的结果,即“defabc”

2. 解法

字符串 S 为abcdef,n=3,设X=abc,Y=def,原字符串可以表示成XY。此时用 T表示翻转, X 的翻转为XT,即XT=cba,同理YT=fed,那么YX=(XTYT)T,三次翻转后可得结果

public String leftRotateString(String str, int n) {
    if (null == str || str.length() == 0 || n == 0 || str.length()  cbafed-> defabc

public String leftRotateString(String str, int n) {
     if (null == str || str.length() == 0 || n == 0 || str.length()  n) {
         return str;
     }
     Queue q = new ArrayBlockingQueue(str.length());
     char[] a = str.toCharArray();
     int len = a.length;
     for (int i = 0; i  len; i++) {
         q.add(a); // 1. fedcba
     }

     for (int j = 0; j  n; j++) {
         q.add(q.poll()); // 2. cbafed
     }
     StringBuilder sb = new StringBuilder();
     for (int k = 0; k  len; k++) {
         sb.append((char) q.poll()); // 3. defabc
     }
     return sb.toString();  
    }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表