leetcode字符串相关题目 | 您所在的位置:网站首页 › 全排列算法js › leetcode字符串相关题目 |
字符串相关题
剑指 Offer 58 - II
https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/ 题目: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 思路: 要求将一个字符串的前n个字符左旋到末尾 可以将这个字符串的前n个字符旋转位置,后n个字符旋转位置 然后此时的字符串以n为分界的字符都已旋转,此时再旋转整体,即可得到左旋后的字符串。 具体步骤为: 反转区间为前n的子串反转区间为n到末尾的子串反转整个字符串代码:(Java) class Solution { public String reverseLeftWords(String s, int n) { int len=s.length(); StringBuilder sb = new StringBuilder(s); reverseString(sb,0,n-1); reverseString(sb,n,len-1); return sb.reverse().toString(); } public void reverseString(StringBuilder sb, int start, int end) { while (start if (needle.length() == 0) return 0; int[] next = new int[needle.length()]; getNext(next,needle);//得到模式串T前缀表 //与字符串进行匹配 int j = -1; for (int i = 0; i j = next[j];//回退 } if (needle.charAt(j+1) == haystack.charAt(i)) j++; if (j == needle.length()-1) return i - needle.length() + 1; } return -1; } public void getNext(int[] next,String s){ int j = -1; next[0] = j; for (int i = 1; i //前后缀不相同 j = next[j];//回退 } if(s.charAt(j+1) == s.charAt(i)) j++;//相同,前缀表+1 next[i] = j; //记录前缀值 } } |
CopyRight 2018-2019 实验室设备网 版权所有 |